# _*_  coding:utf-8 _*_

# Deque的练习
from collections import deque
"""
使用的是yield的方式冻结过程，
for line in lines： #
如果查找的pattern在line是，那么使用yield冻结
如果没有line追加到previous_lines
当使用for i,j in Search(a,b,c)
迭代的时候如果pattern一个都没有匹配上的话 那么只有previous_lines.append会运行,
注意只要函数里面有了yield就表明该函数是可以迭代的
"""
def Search(lines, pattern,historys=5):
    # 最大为五个，因为队列是先进先出的
    previous_lines = deque(maxlen=historys)
    for line in lines:
        if pattern in line:
            yield line, previous_lines
            
        previous_lines.append(line)

def SearchTest():
    with open(r'.\somefile.txt') as f:
        for line, prevLines in Search(f, 'pyth1on', 5):
            for pline in prevLines: 
                print(pline, end='')
            print('line:', line, end='')
            print('.'*20) 

"""
可以看到使用了yield的话，函数就可以使用for的方式进行迭代了，
因为yield语句并没有起作用，所以迭代该函数为空
不过函数还是给执行了
"""
def YieldFun():
    if False:
        print("yield not get there")
        yield 
    print("Here!!")
    a = [1, 2, 3, 4]

def YieldFunTest():
    for i  in YieldFun():
        print(i)
if __name__ == '__main__':
#     SearchTest()
    YieldFunTest()

